package com.jimikongjian.dao;

import com.jimikongjian.models.Room;
import com.jimikongjian.service.modal.FollowerRoomInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * Created by fuxiuyang on 17/2/20.
 */
public interface IRoom {

    /**
     * 获取所有的空间信息
     * @param start
     * @param length
     * @return List<Room>
     */
    public List<Room> getRoomList(@Param("start") int start,
                                  @Param("length") int length);

    /**
     * 通过空间的id，获取该空间的信息
     * @param id
     * @return List<Room>
     */
    public List<Room> getRoomListById(int id);

    /**
     * 通过空间的id，获取该空间的信息
     * @param id
     * @return Room
     */
    public Room getRoomById(int id);

    /**
     * 通过创建者的id，获取其创建的所有的空间
     * @param creatorId
     * @param start
     * @param length
     * @return List<Room>
     */
    public List<Room> getRoomListByCreatorId(@Param("creatorId") int creatorId,
                                             @Param("start") int start,
                                             @Param("length") int length);

    /**
     * 通过创建者的id，获取其创建的个人的空间
     * @param creatorId
     * @param start
     * @param length
     * @return List<Room>
     */
    public List<Room> getMyRoomListByCreatorId(@Param("creatorId") int creatorId,
                                               @Param("start") int start,
                                               @Param("length") int length);

    /**
     * 通过创建者的id，获取其创建的私人的空间
     * @param creatorId
     * @param start
     * @param length
     * @return List<Room>
     */
    public List<Room> getPrivateRoomListByCreatorId(@Param("creatorId") int creatorId,
                                                    @Param("start") int start,
                                                    @Param("length") int length);

    /**
     * 通过创建者的id，获取其创建的公共的空间
     * @param creatorId
     * @param start
     * @param length
     * @return List<Room>
     */
    public List<Room> getPublicRoomListByCreatorId(@Param("creatorId") int creatorId,
                                                   @Param("start") int start,
                                                   @Param("length") int length);

    /**
     * 通过空间名，叫该空间名的或者包含该名称的所有的空间
     * @param name
     * @param start
     * @param length
     * @return List<Room>
     */
    public List<Room> getRoomListByName(@Param("name") String name,
                                        @Param("start") int start,
                                        @Param("length") int length);

    /**
     * 通过空间名，叫该空间名的或者包含该名称的所有个人的空间
     * @param name
     * @param start
     * @param length
     * @return List<Room>
     */
    public List<Room> getMyRoomListByName(@Param("name") String name,
                                          @Param("start") int start,
                                          @Param("length") int length);

    /**
     * 通过空间名，叫该空间名的或者包含该名称的所有私人的空间
     * @param name
     * @param start
     * @param length
     * @return List<Room>
     */
    public List<Room> getPrivateRoomListByName(@Param("name") String name,
                                               @Param("start") int start,
                                               @Param("length") int length);

    /**
     * 通过空间名，叫该空间名的或者包含该名称的所有公有的空间
     * @param name
     * @param start
     * @param length
     * @return List<Room>
     */
    public List<Room> getPublicRoomListByName(@Param("name") String name,
                                              @Param("start") int start,
                                              @Param("length") int length);

    /**
     * 通过用户的id号，获取该用户关注的所有的空间信息
     * @param userId
     * @return List<Room>
     */
    public List<FollowerRoomInfo> getAllRoomListByUserId(@Param("userId") int userId);

    /**
     * 通过用户的id号，获取该用户关注的所有的空间信息
     * @param userId
     * @param start
     * @param length
     * @return List<Room>
     */
    public List<Room> getRoomListByUserId(@Param("userId") int userId,
                                          @Param("start") int start,
                                          @Param("length") int length);

    /**
     * 通过用户的id号，获取该用户关注自己的空间信息
     * @param userId
     * @param start
     * @param length
     * @return List<Room>
     */
    public List<Room> getMyRoomListByUserId(@Param("userId") int userId,
                                            @Param("start") int start,
                                            @Param("length") int length);

    /**
     * 通过用户的id号，获取该用户关注的所有的私有的空间信息
     * @param userId
     * @param start
     * @param length
     * @return List<Room>
     */
    public List<Room> getPrivateRoomListByUserId(@Param("userId") int userId,
                                                 @Param("start") int start,
                                                 @Param("length") int length);

    /**
     * 通过用户的id号，获取该用户关注的所有的公有的空间信息
     * @param userId
     * @param start
     * @param length
     * @return List<Room>
     */
    public List<Room> getPublicRoomListByUserId(@Param("userId") int userId,
                                                @Param("start") Integer start,
                                                @Param("length") Integer length);

    /**
     * 创建一条新的空间
     * @param room
     */
    public void insertRoom(Room room);

    /**
     * 将空间的关注用户+1
     * @param id
     */
    public void updateAddPeoplesCount(int id);

    /**
     * 将空间的关注用户-1
     * @param id
     */
    public void updateSubPeoplesCount(int id);

    /**
     * 更新空间信息,只有空间的名称，空间的封面，空间的个性签名，空间的标签可以更改
     * @param room
     */
    public void updateRoom(Room room);

    /**
     * 删除空间信息
     * @param room
     */
    public void deleteRoom(Room room);
}
